package com.superman.supermarket.client.event;

import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.superman.supermarket.client.event.CollectionPageEvent.CollectionPageEventHandler;

/**
 * 收藏页面事件定义
 * 
 * @author superman
 * @version 2018年7月12日下午4:21:31
 */
public class CollectionPageEvent extends GwtEvent<CollectionPageEventHandler> {

	/**
	 * 事件处理器
	 * 
	 * @author superman
	 * @version 2018年7月12日下午4:22:00
	 */
	public interface CollectionPageEventHandler extends EventHandler {
		/**
		 * 删除
		 * 
		 * @author superman
		 * @version 2018年8月4日 下午8:43:56
		 * @param spuId
		 */
		void delete(String spuId);

	}

	/**
	 * 页面事件类型定义
	 * 
	 * @author superman
	 * @version 2018年8月4日下午8:40:11
	 */
	public enum CollectionPageEventType {
		DELETE // 删除
	}

	public static final Type<CollectionPageEventHandler> TYPE = new Type<CollectionPageEventHandler>();

	private Object context;
	private CollectionPageEventType eventType;

	/**
	 * 构造方法
	 * 
	 * @author superman
	 * @version 2018年8月4日 下午8:42:05
	 * @param eventType
	 */
	public CollectionPageEvent(CollectionPageEventType eventType) {
		this.eventType = eventType;
	}

	/**
	 * 构造方法
	 * 
	 * @author superman
	 * @version 2018年8月4日 下午8:42:08
	 * @param eventType
	 * @param context
	 */
	public CollectionPageEvent(CollectionPageEventType eventType, Object context) {
		this.eventType = eventType;
		this.context = context;
	}

	@Override
	protected void dispatch(CollectionPageEventHandler handler) {
		switch (this.eventType) {
			case DELETE:
				handler.delete((String) context);
				break;
			default:
				break;
		}
	}

	@Override
	public Type<CollectionPageEventHandler> getAssociatedType() {
		return TYPE;
	}

}
